home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgLangD.iso / Borland Visual dBASE Professiona v7.0 / DATA1.CAB / Sample_dBASE / Fleet / GenWizard.wfm < prev    next >
Text File  |  1997-11-20  |  43KB  |  1,575 lines

  1. //--------------------------------------------------------------
  2. //
  3. //  GenWizard.wfm --  Schedule Generation Wizard
  4. //
  5. //  This form uses a common wizard interface to generate
  6. //  airline schedules. Each step of the wizard is defined 
  7. //  as a seperate page on the form. The wizard uses 
  8. //  templates as a basis for generating new schedule data.
  9. //  As users step through the wizard, they can select, 
  10. //  modify and create new templates.
  11. //
  12. //  Dependencies: GENWIZARD.DBF
  13. //
  14. //  Visual dBASE Samples Group
  15. //
  16. //  $Revision:   1.17  $
  17. //
  18. //  Copyright (c) 1997, Borland International, Inc. 
  19. //  All rights reserved.
  20. //
  21. //---------------------------------------------------------------
  22. #DEFINE ALIASFLEET
  23. SET TALK OFF
  24. ** END HEADER -- do not remove this line
  25. //
  26. // Generated on 10/23/97
  27. //
  28. parameter bModal
  29. local f
  30. f = new genwizardForm()
  31. if (bModal)
  32.    f.mdi = false // ensure not MDI
  33.    f.readModal()
  34. else
  35.    f.open()
  36. endif
  37.  
  38. class genwizardForm of FORM
  39.    with (this)
  40.       onClose = class::FORM_ONCLOSE
  41.       open = class::FORM_OPEN
  42.       readModal = class::FORM_READMODAL
  43.       autoCenter = true
  44.       scaleFontSize = 8
  45.       scaleFontBold = false
  46.       height = 16.4545
  47.       left = 15
  48.       top = 0.8636
  49.       width = 82
  50.       text = "Schedule Generation Wizard - Step 1 of 5"
  51.       icon = "FILE fleet.ico"
  52.    endwith
  53.  
  54.  
  55.    this.DMCONNECT = new DATAMODREF()
  56.    this.DMCONNECT.parent = this
  57.    with (this.DMCONNECT)
  58.       filename = "fconnect.dmd"
  59.       dataModClass = "fconnectDataModule"
  60.       share = 0
  61.       active = true
  62.       left = 50
  63.       top = 0
  64.    endwith
  65.  
  66.  
  67.    this.AIRCRAFT1 = new QUERY()
  68.    this.AIRCRAFT1.parent = this
  69.    with (this.AIRCRAFT1)
  70.       left = 76
  71.       top = 4.5
  72.       database = form.DMCONNECT.ref.dbfleet
  73.       sql = 'SELECT * FROM "AIRCRAFT.DBF" aircaft'
  74.       active = true
  75.    endwith
  76.  
  77.  
  78.    with (this.AIRCRAFT1.rowset)
  79.  
  80.       indexName = "AIRCRAFT ID"
  81.    endwith
  82.  
  83.  
  84.    this.FLIGHT1 = new QUERY()
  85.    this.FLIGHT1.parent = this
  86.    with (this.FLIGHT1)
  87.       left = 76
  88.       top = 6.5
  89.       database = form.DMCONNECT.ref.dbfleet
  90.       sql = 'SELECT * FROM "FLIGHT.DBF"'
  91.       active = true
  92.    endwith
  93.  
  94.  
  95.  
  96.  
  97.    this.SCHEDULE1 = new QUERY()
  98.    this.SCHEDULE1.parent = this
  99.    with (this.SCHEDULE1)
  100.       left = 76
  101.       top = 0
  102.       database = form.DMCONNECT.ref.dbfleet
  103.       sql = 'SELECT * FROM "SCHEDULE.DBF"'
  104.       active = true
  105.    endwith
  106.  
  107.  
  108.  
  109.  
  110.    this.RECTANGLE1 = new RECTANGLE(this)
  111.    with (this.RECTANGLE1)
  112.       left = 4
  113.       top = 4.7273
  114.       width = 75
  115.       height = 2.3684
  116.       metric = 0
  117.       text = "Schedule"
  118.       colorNormal = "WindowText/BtnFace"
  119.       fontName = "MS Sans Serif"
  120.       fontSize = 8
  121.       pageno = 4
  122.    endwith
  123.  
  124.  
  125.    this.BOXCHANGES = new RECTANGLE(this)
  126.    with (this.BOXCHANGES)
  127.       left = 4
  128.       top = 8
  129.       width = 75
  130.       height = 5.2105
  131.       metric = 0
  132.       text = "Template"
  133.       colorNormal = "WindowText/BtnFace"
  134.       fontName = "MS Sans Serif"
  135.       fontSize = 8
  136.       pageno = 4
  137.    endwith
  138.  
  139.  
  140.    this.BOXTEMPLATE = new RECTANGLE(this)
  141.    with (this.BOXTEMPLATE)
  142.       left = 10
  143.       top = 4.4545
  144.       width = 34
  145.       height = 8.5455
  146.       metric = 0
  147.       text = "Schedule Template"
  148.       colorNormal = "WindowText/BtnFace"
  149.       fontName = "MS Sans Serif"
  150.       fontSize = 8
  151.       pageno = 2
  152.    endwith
  153.  
  154.  
  155.    this.BOXASSIGN = new RECTANGLE(this)
  156.    with (this.BOXASSIGN)
  157.       left = 1
  158.       top = 5.4545
  159.       width = 80
  160.       height = 8.5
  161.       metric = 0
  162.       text = "Flight Assignments"
  163.       colorNormal = "WindowText/BtnFace"
  164.       fontName = "MS Sans Serif"
  165.       fontSize = 8
  166.       pageno = 3
  167.    endwith
  168.  
  169.  
  170.    this.BUTTONCANCEL = new PUSHBUTTON(this)
  171.    with (this.BUTTONCANCEL)
  172.       onClick = class::BUTTONCANCEL_ONCLICK
  173.       height = 1.1818
  174.       left = 25
  175.       top = 14.75
  176.       width = 12
  177.       text = "Cancel"
  178.       metric = 0
  179.       fontName = "MS Sans Serif"
  180.       fontSize = 8
  181.       group = true
  182.       colorNormal = "BtnText/BtnFace"
  183.       pageno = 0
  184.       value = false
  185.    endwith
  186.  
  187.  
  188.    this.BUTTONBACK = new PUSHBUTTON(this)
  189.    with (this.BUTTONBACK)
  190.       onClick = class::BUTTONBACK_ONCLICK
  191.       enabled = false
  192.       height = 1.1818
  193.       left = 39
  194.       top = 14.75
  195.       width = 12
  196.       text = "< &Back"
  197.       metric = 0
  198.       fontName = "MS Sans Serif"
  199.       fontSize = 8
  200.       group = true
  201.       colorNormal = "BtnText/BtnFace"
  202.       pageno = 0
  203.       value = false
  204.    endwith
  205.  
  206.  
  207.    this.BUTTONNEXT = new PUSHBUTTON(this)
  208.    with (this.BUTTONNEXT)
  209.       onClick = class::BUTTONNEXT_ONCLICK
  210.       height = 1.1818
  211.       left = 53
  212.       top = 14.75
  213.       width = 12
  214.       text = "&Next >"
  215.       metric = 0
  216.       fontName = "MS Sans Serif"
  217.       fontSize = 8
  218.       group = true
  219.       colorNormal = "BtnText/BtnFace"
  220.       pageno = 0
  221.       value = false
  222.    endwith
  223.  
  224.  
  225.    this.BUTTONFINISH = new PUSHBUTTON(this)
  226.    with (this.BUTTONFINISH)
  227.       onClick = class::BUTTONFINISH_ONCLICK
  228.       height = 1.1818
  229.       left = 67
  230.       top = 14.75
  231.       width = 12
  232.       text = "Finish"
  233.       metric = 0
  234.       fontName = "MS Sans Serif"
  235.       fontSize = 8
  236.       group = true
  237.       colorNormal = "BtnText/BtnFace"
  238.       pageno = 0
  239.       value = false
  240.    endwith
  241.  
  242.  
  243.    this.BOXLINE = new RECTANGLE(this)
  244.    with (this.BOXLINE)
  245.       left = 1
  246.       top = 14.2273
  247.       width = 80
  248.       height = 0.2
  249.       metric = 0
  250.       text = ""
  251.       colorNormal = "WindowText/BtnFace"
  252.       border = false
  253.       fontName = "MS Sans Serif"
  254.       fontSize = 8
  255.       pageno = 0
  256.       borderStyle = 2
  257.    endwith
  258.  
  259.  
  260.    this.SPINBEGIN = new SPINBOX(this)
  261.    with (this.SPINBEGIN)
  262.       height = 1
  263.       left = 52
  264.       top = 6
  265.       width = 13
  266.       metric = 0
  267.       colorHighLight = ""
  268.       rangeMax = 0
  269.       rangeMin = 1
  270.       fontName = "MS Sans Serif"
  271.       fontSize = 8
  272.       value = 1
  273.       validRequired = true
  274.       borderStyle = 7
  275.    endwith
  276.  
  277.  
  278.    this.SPINMONTHS = new SPINBOX(this)
  279.    with (this.SPINMONTHS)
  280.       height = 1
  281.       left = 55
  282.       top = 9
  283.       width = 10
  284.       metric = 0
  285.       picture = "99"
  286.       colorHighLight = ""
  287.       rangeMax = 12
  288.       rangeMin = 1
  289.       fontName = "MS Sans Serif"
  290.       fontSize = 8
  291.       value = 1
  292.       validRequired = true
  293.       rangeRequired = true
  294.       borderStyle = 7
  295.    endwith
  296.  
  297.  
  298.    this.LABELSTART = new TEXT(this)
  299.    with (this.LABELSTART)
  300.       height = 2
  301.       left = 11
  302.       top = 6
  303.       width = 41
  304.       metric = 0
  305.       colorNormal = "BtnText"
  306.       fontName = "MS Sans Serif"
  307.       fontSize = 8
  308.       text = "What date do you want to use to begin generating schedule information?"
  309.    endwith
  310.  
  311.  
  312.    this.LABELMONTHS = new TEXT(this)
  313.    with (this.LABELMONTHS)
  314.       height = 2
  315.       left = 11
  316.       top = 9
  317.       width = 41
  318.       metric = 0
  319.       colorNormal = "BtnText"
  320.       fontName = "MS Sans Serif"
  321.       fontSize = 8
  322.       text = "How many months of schedule information would you like to generate?"
  323.    endwith
  324.  
  325.  
  326.    this.LISTTEMPLATE = new LISTBOX(this)
  327.    with (this.LISTTEMPLATE)
  328.       onSelChange = class::LISTTEMPLATE_ONSELCHANGE
  329.       onOpen = class::LISTTEMPLATE_ONOPEN
  330.       height = 7.0909
  331.       left = 11
  332.       top = 5.5
  333.       width = 31
  334.       metric = 0
  335.       id = 110
  336.       fontName = "MS Sans Serif"
  337.       fontSize = 8
  338.       colorHighLight = "HighLightText/HighLight"
  339.       pageno = 2
  340.    endwith
  341.  
  342.  
  343.    this.LABELSELECT = new TEXT(this)
  344.    with (this.LABELSELECT)
  345.       height = 1
  346.       left = 36
  347.       top = 6.5
  348.       width = 20
  349.       metric = 0
  350.       colorNormal = "BtnText"
  351.       fontName = "MS Sans Serif"
  352.       fontSize = 8
  353.       text = " Selected:"
  354.       pageno = 3
  355.    endwith
  356.  
  357.  
  358.    this.LISTSELECT = new LISTBOX(this)
  359.    with (this.LISTSELECT)
  360.       onSelChange = class::REFRESHDAYS
  361.       height = 6
  362.       left = 36
  363.       top = 7.5
  364.       width = 28
  365.       metric = 0
  366.       id = 115
  367.       fontName = "MS Sans Serif"
  368.       fontSize = 8
  369.       colorHighLight = "HighLightText/HighLight"
  370.       pageno = 3
  371.    endwith
  372.  
  373.  
  374.    this.RADIOGEN = new RADIOBUTTON(this)
  375.    with (this.RADIOGEN)
  376.       onChange = class::RADIOCHANGE_ONCHANGE
  377.       transparent = false
  378.       height = 1
  379.       left = 6
  380.       top = 9
  381.       width = 54
  382.       text = "Apply Template Changes to Current Generation Only"
  383.       metric = 0
  384.       colorNormal = "WindowText/BtnFace"
  385.       fontName = "MS Sans Serif"
  386.       fontSize = 8
  387.       group = true
  388.       value = true
  389.       pageno = 4
  390.    endwith
  391.  
  392.  
  393.    this.RADIOSAVE = new RADIOBUTTON(this)
  394.    with (this.RADIOSAVE)
  395.       onChange = class::RADIOCHANGE_ONCHANGE
  396.       transparent = false
  397.       height = 1
  398.       left = 6
  399.       top = 10.25
  400.       width = 35
  401.       text = "Save Changes to Selected Template"
  402.       metric = 0
  403.       colorNormal = "WindowText/BtnFace"
  404.       fontName = "MS Sans Serif"
  405.       fontSize = 8
  406.       group = false
  407.       value = false
  408.       pageno = 4
  409.    endwith
  410.  
  411.  
  412.    this.RADIONEW = new RADIOBUTTON(this)
  413.    with (this.RADIONEW)
  414.       onChange = class::RADIOCHANGE_ONCHANGE
  415.       transparent = false
  416.       height = 1
  417.       left = 6
  418.       top = 11.5
  419.       width = 25
  420.       text = "Save as New Template"
  421.       metric = 0
  422.       colorNormal = "WindowText/BtnFace"
  423.       fontName = "MS Sans Serif"
  424.       fontSize = 8
  425.       group = false
  426.       value = false
  427.       pageno = 4
  428.    endwith
  429.  
  430.  
  431.    this.CHECKSUNDAY = new CHECKBOX(this)
  432.    with (this.CHECKSUNDAY)
  433.       enabled = false
  434.       transparent = false
  435.       height = 1
  436.       left = 65
  437.       top = 6.5
  438.       width = 14
  439.       text = "Sunday"
  440.       metric = 0
  441.       colorNormal = "WindowText/BtnFace"
  442.       fontName = "MS Sans Serif"
  443.       fontSize = 8
  444.       value = false
  445.       group = true
  446.       pageno = 3
  447.    endwith
  448.  
  449.  
  450.    this.CHECKMONDAY = new CHECKBOX(this)
  451.    with (this.CHECKMONDAY)
  452.       enabled = false
  453.       transparent = false
  454.       height = 1
  455.       left = 65
  456.       top = 7.5
  457.       width = 14
  458.       text = "Monday"
  459.       metric = 0
  460.       colorNormal = "WindowText/BtnFace"
  461.       fontName = "MS Sans Serif"
  462.       fontSize = 8
  463.       value = false
  464.       group = true
  465.       pageno = 3
  466.    endwith
  467.  
  468.  
  469.    this.CHECKTUESDAY = new CHECKBOX(this)
  470.    with (this.CHECKTUESDAY)
  471.       enabled = false
  472.       transparent = false
  473.       height = 1
  474.       left = 65
  475.       top = 8.5
  476.       width = 14
  477.       text = "Tuesday"
  478.       metric = 0
  479.       colorNormal = "WindowText/BtnFace"
  480.       fontName = "MS Sans Serif"
  481.       fontSize = 8
  482.       value = false
  483.       group = true
  484.       pageno = 3
  485.    endwith
  486.  
  487.  
  488.    this.CHECKWEDNESDAY = new CHECKBOX(this)
  489.    with (this.CHECKWEDNESDAY)
  490.       enabled = false
  491.       transparent = false
  492.       height = 1
  493.       left = 65
  494.       top = 9.5
  495.       width = 14
  496.       text = "Wednesday"
  497.       metric = 0
  498.       colorNormal = "WindowText/BtnFace"
  499.       fontName = "MS Sans Serif"
  500.       fontSize = 8
  501.       value = false
  502.       group = true
  503.       pageno = 3
  504.    endwith
  505.  
  506.  
  507.    this.CHECKTHURSDAY = new CHECKBOX(this)
  508.    with (this.CHECKTHURSDAY)
  509.       enabled = false
  510.       transparent = false
  511.       height = 1
  512.       left = 65
  513.       top = 10.5
  514.       width = 14
  515.       text = "Thursday"
  516.       metric = 0
  517.       colorNormal = "WindowText/BtnFace"
  518.       fontName = "MS Sans Serif"
  519.       fontSize = 8
  520.       value = false
  521.       group = true
  522.       pageno = 3
  523.    endwith
  524.  
  525.  
  526.    this.CHECKFRIDAY = new CHECKBOX(this)
  527.    with (this.CHECKFRIDAY)
  528.       enabled = false
  529.       transparent = false
  530.       height = 1
  531.       left = 65
  532.       top = 11.5
  533.       width = 14
  534.       text = "Friday"
  535.       metric = 0
  536.       colorNormal = "WindowText/BtnFace"
  537.       fontName = "MS Sans Serif"
  538.       fontSize = 8
  539.       value = false
  540.       group = true
  541.       pageno = 3
  542.    endwith
  543.  
  544.  
  545.    this.CHECKSATURDAY = new CHECKBOX(this)
  546.    with (this.CHECKSATURDAY)
  547.       enabled = false
  548.       transparent = false
  549.       height = 1
  550.       left = 65
  551.       top = 12.5
  552.       width = 14
  553.       text = "Saturday"
  554.       metric = 0
  555.       colorNormal = "WindowText/BtnFace"
  556.       fontName = "MS Sans Serif"
  557.       fontSize = 8
  558.       value = false
  559.       group = true
  560.       pageno = 3
  561.    endwith
  562.  
  563.  
  564.    this.HELPSTEP4 = new TEXT(this)
  565.    with (this.HELPSTEP4)
  566.       height = 3
  567.       left = 13
  568.       top = 5
  569.       width = 65
  570.       metric = 0
  571.       colorNormal = "BtnText"
  572.       fontName = "MS Sans Serif"
  573.       fontSize = 8
  574.       text = "That's all the information the wizard needs to generate schedule information. Click on Finish to begin the generation."
  575.       pageno = 5
  576.    endwith
  577.  
  578.  
  579.    this.REDARROW1 = new IMAGE(this)
  580.    with (this.REDARROW1)
  581.       height = 0.6316
  582.       left = 7
  583.       top = 6
  584.       width = 1.8333
  585.       metric = 0
  586.       dataSource = 'FILENAME "redarrow.gif"'
  587.       alignment = 3
  588.       borderStyle = 3
  589.    endwith
  590.  
  591.  
  592.    this.IMAGEWAND = new IMAGE(this)
  593.    with (this.IMAGEWAND)
  594.       height = 3
  595.       left = 1.5
  596.       top = 0.8
  597.       width = 10.1667
  598.       metric = 0
  599.       dataSource = 'FILENAME "wand.gif"'
  600.       alignment = 3
  601.       borderStyle = 3
  602.    endwith
  603.  
  604.  
  605.    this.HELPSTEP1 = new TEXT(this)
  606.    with (this.HELPSTEP1)
  607.       height = 2.5
  608.       left = 12
  609.       top = 0.75
  610.       width = 65
  611.       metric = 0
  612.       colorNormal = "BtnText"
  613.       fontName = "MS Sans Serif"
  614.       fontSize = 8
  615.       text = "The Schedule Generation Wizard can generate future schedule information based on schedule templates. After generating a schedule, you can modify it from the Fleet Tree and Schedule forms."
  616.    endwith
  617.  
  618.  
  619.    this.REDARROW2 = new IMAGE(this)
  620.    with (this.REDARROW2)
  621.       height = 0.6316
  622.       left = 7
  623.       top = 9
  624.       width = 1.8333
  625.       metric = 0
  626.       dataSource = 'FILENAME "redarrow.gif"'
  627.       alignment = 3
  628.       borderStyle = 3
  629.    endwith
  630.  
  631.  
  632.    this.REDARROW3 = new IMAGE(this)
  633.    with (this.REDARROW3)
  634.       height = 0.6316
  635.       left = 4
  636.       top = 0.8
  637.       width = 1.8333
  638.       metric = 0
  639.       dataSource = 'FILENAME "redarrow.gif"'
  640.       alignment = 3
  641.       pageno = 2
  642.       borderStyle = 3
  643.    endwith
  644.  
  645.  
  646.    this.HELPSTEP2 = new TEXT(this)
  647.    with (this.HELPSTEP2)
  648.       height = 2.5789
  649.       left = 7
  650.       top = 0.7368
  651.       width = 70
  652.       metric = 0
  653.       colorNormal = "BtnText"
  654.       fontName = "MS Sans Serif"
  655.       fontSize = 8
  656.       text = "Select a schedule template. Each schedule template contains aircraft flight assignments based on the days of the week. You can rename or delete any template except the Standard template."
  657.       pageno = 2
  658.    endwith
  659.  
  660.  
  661.    this.REDARROW4 = new IMAGE(this)
  662.    with (this.REDARROW4)
  663.       height = 0.6316
  664.       left = 4
  665.       top = 0.8
  666.       width = 1.8333
  667.       metric = 0
  668.       dataSource = 'FILENAME "redarrow.gif"'
  669.       alignment = 3
  670.       pageno = 3
  671.       borderStyle = 3
  672.    endwith
  673.  
  674.  
  675.    this.IMAGEBOLT = new IMAGE(this)
  676.    with (this.IMAGEBOLT)
  677.       height = 3.0526
  678.       left = 1.5
  679.       top = 5
  680.       width = 10.1667
  681.       metric = 0
  682.       dataSource = 'FILENAME "bigbolt.gif"'
  683.       alignment = 3
  684.       pageno = 5
  685.       borderStyle = 3
  686.    endwith
  687.  
  688.  
  689.    this.LISTAVAIL = new LISTBOX(this)
  690.    with (this.LISTAVAIL)
  691.       height = 6
  692.       left = 3
  693.       top = 7.5
  694.       width = 28
  695.       metric = 0
  696.       id = 139
  697.       fontName = "MS Sans Serif"
  698.       fontSize = 8
  699.       colorHighLight = "HighLightText/HighLight"
  700.       pageno = 3
  701.    endwith
  702.  
  703.  
  704.    this.BUTTONSELECT = new PUSHBUTTON(this)
  705.    with (this.BUTTONSELECT)
  706.       onClick = class::BUTTONSELECT_ONCLICK
  707.       height = 1.2273
  708.       left = 31.5
  709.       top = 9
  710.       width = 4
  711.       text = ">"
  712.       metric = 0
  713.       fontName = "MS Sans Serif"
  714.       fontSize = 8
  715.       group = true
  716.       colorNormal = "BtnText/BtnFace"
  717.       pageno = 3
  718.       value = false
  719.    endwith
  720.  
  721.  
  722.    this.BUTTONREMOVE = new PUSHBUTTON(this)
  723.    with (this.BUTTONREMOVE)
  724.       onClick = class::BUTTONREMOVE_ONCLICK
  725.       height = 1.1818
  726.       left = 31.5
  727.       top = 10.5
  728.       width = 4
  729.       text = "<"
  730.       metric = 0
  731.       fontName = "MS Sans Serif"
  732.       fontSize = 8
  733.       group = true
  734.       colorNormal = "BtnText/BtnFace"
  735.       pageno = 3
  736.       value = false
  737.    endwith
  738.  
  739.  
  740.    this.LABELAVAIL = new TEXT(this)
  741.    with (this.LABELAVAIL)
  742.       height = 1
  743.       left = 3
  744.       top = 6.5
  745.       width = 20
  746.       metric = 0
  747.       colorNormal = "BtnText"
  748.       fontName = "MS Sans Serif"
  749.       fontSize = 8
  750.       text = " Available:"
  751.       pageno = 3
  752.    endwith
  753.  
  754.  
  755.    this.LABELCRAFT = new TEXT(this)
  756.    with (this.LABELCRAFT)
  757.       height = 1
  758.       left = 3
  759.       top = 4
  760.       width = 8
  761.       metric = 0
  762.       colorNormal = "BtnText"
  763.       alignVertical = 1
  764.       fontName = "MS Sans Serif"
  765.       fontSize = 8
  766.       text = "Aircraft:"
  767.       pageno = 3
  768.    endwith
  769.  
  770.  
  771.    this.COMBOAIRCRAFT = new COMBOBOX(this)
  772.    with (this.COMBOAIRCRAFT)
  773.       onChange = class::REFRESHFLIGHTLISTS
  774.       height = 1.1
  775.       left = 12
  776.       top = 4
  777.       width = 30
  778.       metric = 0
  779.       fontName = "MS Sans Serif"
  780.       fontSize = 8
  781.       pageno = 3
  782.       style = 2
  783.    endwith
  784.  
  785.  
  786.    this.HELPSTEP3 = new TEXT(this)
  787.    with (this.HELPSTEP3)
  788.       height = 3
  789.       left = 7
  790.       top = 0.75
  791.       width = 70
  792.       metric = 0
  793.       colorNormal = "BtnText"
  794.       fontName = "MS Sans Serif"
  795.       fontSize = 8
  796.       text = "You can modify the template by selecting and removing flight assignments for each aircraft. For each flight assignment, you can select what days of the week to schedule for a selected aircraft. The Flight table determines what days are available for each f";
  797.        + "light."
  798.       pageno = 3
  799.    endwith
  800.  
  801.  
  802.    this.BUTTONDELETE = new PUSHBUTTON(this)
  803.    with (this.BUTTONDELETE)
  804.       onClick = class::BUTTONDELETE_ONCLICK
  805.       enabled = false
  806.       height = 1.18
  807.       left = 50
  808.       top = 6.6316
  809.       width = 15
  810.       text = "Delete..."
  811.       metric = 0
  812.       fontName = "MS Sans Serif"
  813.       fontSize = 8
  814.       group = true
  815.       colorNormal = "BtnText/BtnFace"
  816.       pageno = 2
  817.       value = false
  818.    endwith
  819.  
  820.  
  821.    this.BUTTONRENAME = new PUSHBUTTON(this)
  822.    with (this.BUTTONRENAME)
  823.       onClick = class::BUTTONRENAME_ONCLICK
  824.       enabled = false
  825.       height = 1.18
  826.       left = 50
  827.       top = 8.5263
  828.       width = 15
  829.       text = "Rename..."
  830.       metric = 0
  831.       fontName = "MS Sans Serif"
  832.       fontSize = 8
  833.       group = true
  834.       colorNormal = "BtnText/BtnFace"
  835.       pageno = 2
  836.       value = false
  837.    endwith
  838.  
  839.  
  840.    this.ENTRYTNAME = new ENTRYFIELD(this)
  841.    with (this.ENTRYTNAME)
  842.       enabled = false
  843.       height = 1
  844.       left = 52
  845.       top = 11.5
  846.       width = 24
  847.       metric = 0
  848.       colorHighLight = ""
  849.       fontName = "MS Sans Serif"
  850.       fontSize = 8
  851.       value = "NEWTEMPLATE"
  852.       pageno = 4
  853.       borderStyle = 7
  854.    endwith
  855.  
  856.  
  857.    this.ELABELNEW = new ENTRYFIELD(this)
  858.    with (this.ELABELNEW)
  859.       when = {||false}
  860.       enabled = false
  861.       height = 1
  862.       left = 41
  863.       top = 11.65
  864.       width = 9.5
  865.       metric = 0
  866.       colorNormal = "BtnText/BtnFace"
  867.       colorHighLight = ""
  868.       border = false
  869.       tabStop = false
  870.       fontName = "MS Sans Serif"
  871.       fontSize = 8
  872.       value = "Template:"
  873.       pageno = 4
  874.       borderStyle = 3
  875.    endwith
  876.  
  877.  
  878.    this.IMAGE1 = new IMAGE(this)
  879.    with (this.IMAGE1)
  880.       height = 0.6316
  881.       left = 4
  882.       top = 0.8
  883.       width = 1.8333
  884.       metric = 0
  885.       dataSource = 'FILENAME "redarrow.gif"'
  886.       alignment = 3
  887.       pageno = 4
  888.       borderStyle = 3
  889.    endwith
  890.  
  891.  
  892.    this.TEXT1 = new TEXT(this)
  893.    with (this.TEXT1)
  894.       height = 3.5263
  895.       left = 7
  896.       top = 0.7368
  897.       width = 72
  898.       metric = 0
  899.       colorNormal = "BtnText"
  900.       fontName = "MS Sans Serif"
  901.       fontSize = 8
  902.       text = "If you made any changes to the template, you can now choose to use the changes for the current generation only, save changes to the current template or create a new template. To create a new template without generating altering the schedule table, uncheck ";
  903.        + "the Add option and select Save as New Template ."
  904.       pageno = 4
  905.    endwith
  906.  
  907.  
  908.    this.CHECKGEN = new CHECKBOX(this)
  909.    with (this.CHECKGEN)
  910.       transparent = false
  911.       height = 1
  912.       left = 7
  913.       top = 5.6842
  914.       width = 51
  915.       text = "Add Generated Rows to the Schedule Table"
  916.       metric = 0
  917.       colorNormal = "WindowText/BtnFace"
  918.       fontName = "MS Sans Serif"
  919.       fontSize = 8
  920.       value = true
  921.       group = true
  922.       pageno = 4
  923.    endwith
  924.  
  925.  
  926.    this.rowset = this.schedule1.rowset
  927.  
  928.    // {Linked Method} form.buttonselect.onClick
  929.    function BUTTONSELECT_onClick
  930.        class::moveItem( this.form.listAvail, this.form.listSelect )
  931.        this.form.qGen.rowset.beginAppend()
  932.        with ( this.form.qGen.rowset )
  933.            fields["Template Name"].value := this.form.listTemplate.value
  934.            fields["Aircraft ID"].value   := INT( VAL( this.form.comboAircraft.value ) )
  935.            fields["Flight ID"].value     := INT( VAL( this.form.listSelect.value ) )
  936.        endwith
  937.        this.form.qGen.rowset.save()
  938.    return ( class::refreshDays() )
  939.  
  940.    // {Linked Method} form.buttonremove.onClick
  941.    function BUTTONREMOVE_onClick
  942.       local bFound, nFlight
  943.       nFlight = INT( VAL( this.form.listSelect.value ) )
  944.       class::moveItem( this.form.listSelect, this.form.listAvail )
  945.       bFound = this.form.qGen.rowset.applyLocate( ;
  946.             '"Template Name" = ' + "'" + this.form.listTemplate.value + "'" +  ;
  947.       ' AND "Aircraft ID" = '  + INT( VAL(this.form.comboAircraft.value) ) + ;
  948.       ' AND "Flight ID" = '    + INT( nFlight ) )
  949.       if ( bFound )
  950.          this.form.qGen.rowset.delete()
  951.          if ( not this.form.qGen.rowset.next(-1) )
  952.             this.form.qGen.rowset.next() 
  953.          endif         
  954.       endif
  955.       class::refreshDays()
  956.    return ( bFound )
  957.  
  958.    // {Linked Method} form.buttonrename.onClick
  959.    function BUTTONRENAME_onClick
  960.       local sName
  961.       sName = this.form.listTemplate.value
  962.       sName := prompt("New name:", sName )
  963.       if ( sName <> this.form.listTemplate.value )
  964.          class::renameTemplate( sName, "genwizard.dbf" )
  965.          class::renameTemplate( sName )      
  966.          class::fillTemplateList( this.form, sName )
  967.       endif
  968.    return
  969.  
  970.    function renameTemplate( sNewName, pTable )
  971.       local tQ, sOldName, sTable
  972.       tQ = new Query()
  973.       sOldName = this.form.listTemplate.value
  974.       if ( PCOUNT() == 1 )
  975.          sTable = "'" + this.form.gTable + "'"
  976.       else
  977.          sTable = "'" + LTRIM(RTRIM(pTable)) + "'" 
  978.       endif
  979.       with ( tQ )
  980.          database := this.form.dmConnect.ref.dbFleet
  981.          sql := "SELECT * FROM " + sTable              
  982.          active := true
  983.       endwith
  984.       do while ( tQ.rowset.applyLocate('"Template Name" = ' + "'" + sOldName + "'" ) )
  985.          tQ.rowset.fields["Template Name"].value := sNewName      
  986.       enddo
  987.       tQ.active := false
  988.    return ( sTable )
  989.  
  990.    function moveItem( listFrom, listTo )
  991.       local bSelectOK, nIndex
  992.       bSelectOK = ( listFrom.curSel > 0 )
  993.       if ( bSelectOK )
  994.          listTo.options.add( listFrom.value )
  995.          listTo.options.sort()
  996.          nIndex = listTo.options.scan( listFrom.value )
  997.          listFrom.options.delete( listFrom.curSel )
  998.          if ( listFrom.options.size > 1 )
  999.             listFrom.options.resize( listFrom.options.size - 1 )
  1000.             if ( listFrom.options.size < listFrom.curSel )
  1001.                listFrom.curSel := listFrom.options.size
  1002.             endif
  1003.          else
  1004.             listFrom.options = new Array()
  1005.          endif
  1006.          listFrom.dataSource := listFrom.dataSource
  1007.          listTo.dataSource   := listTo.dataSource
  1008.          listTo.curSel       := nIndex
  1009.       endif
  1010.    return ( bSelectOK )
  1011.   
  1012.  
  1013.    // {Linked Method} form.radionew.onChange
  1014.    // {Linked Method} form.radiosave.onChange
  1015.    // {Linked Method} form.radiogen.onChange
  1016.    function RADIOCHANGE_onChange
  1017.       local bNew
  1018.       bNew = this.form.radioNew.value
  1019.       with (this.form)
  1020.          eLabelNew.enabled  := bNew
  1021.          entryTName.enabled := bNew
  1022.       endwith
  1023.       if ( bNew )
  1024.          this.form.entryTname.value := "NEWTEMPLATE"
  1025.       else
  1026.          this.form.entryTName.value := this.form.listTemplate.value
  1027.       endif
  1028.    return
  1029.  
  1030.    // {Linked Method} form.buttonback.onClick
  1031.    function BUTTONBACK_onClick
  1032.       this.form.pageno--
  1033.       this.enabled :=  ( this.form.pageno > 1 )
  1034.       this.form.buttonNext.enabled := ( this.form.pageno < 5 )
  1035.       class::updateCaption()
  1036.    return ( this.form.pageno )
  1037.  
  1038.    function updateCaption
  1039.       this.form.text = "Schedule Generation Wizard - Step " + ;
  1040.          LTRIM( RTRIM ( STR( this.form.pageno ) ) ) + " of 5 "
  1041.    return ( this.form.text )
  1042.  
  1043.    // {Linked Method} form.buttoncancel.onClick
  1044.    function BUTTONCANCEL_onClick
  1045.    return ( this.form.close() )
  1046.  
  1047.    // {Linked Method} form.buttondelete.onClick
  1048.    function BUTTONDELETE_onClick
  1049.       local bDelete
  1050.       bDelete = MSGBOX("You are about to delete the selected template." ;
  1051.                      + CHR(13) ;
  1052.                      + "Click Yes to delete the current template.", ;
  1053.                      "Alert", ;
  1054.                      4) == 6
  1055.       if ( bDelete )
  1056.          // delete template from genwizard and working copy
  1057.          class::deleteTemplate()  // default is working copy
  1058.          class::deleteTemplate("genwizard.dbf")
  1059.          class::fillTemplateList( this.form )
  1060.       endif
  1061.    return ( bDelete )
  1062.  
  1063.    function deleteTemplate( pTable )
  1064.       local tQ, sTable
  1065.       tQ = new Query()
  1066.       if ( PCOUNT() == 0 )
  1067.          sTable = "'" + this.form.gTable + "'"
  1068.       else
  1069.          sTable = "'" + LTRIM(RTRIM(pTable)) + "'" 
  1070.       endif
  1071.       with ( tQ )
  1072.          database := this.form.dmConnect.ref.dbFleet
  1073.          sql      := 'SELECT * FROM ' + sTable
  1074.          active := true
  1075.       endwith
  1076.       tQ.rowset.filter := '"Template Name" = ' + ;
  1077.                  "'" + this.form.listTemplate.value + "'"
  1078.       tQ.rowset.first()
  1079.       do while ( not tQ.rowset.endOfSet )
  1080.          tQ.rowset.delete()
  1081.          tQ.rowset.first()
  1082.       enddo
  1083.       tQ.active := false
  1084.       if ( PCOUNT() == 1 )
  1085.          this.form.dmConnect.ref.dbFleet.packTable( pTable )
  1086.       endif
  1087.    return ( sTable )
  1088.  
  1089.    // {Linked Method} form.buttonfinish.onClick
  1090.    function BUTTONFINISH_onClick
  1091.       local bFinish, nCount, sMessage
  1092.       bFinish  = true
  1093.       nCount   = 0
  1094.       sMessage = "Operation Complete." + CHR(13) + CHR(13)
  1095.       do case
  1096.          case ( this.form.radioNew.value )
  1097.               if ( class::ValidateNewName() )
  1098.                  bFinish := true
  1099.                  class::saveTemplate( true )
  1100.                  sMessage += "Saved new template as: " + ;
  1101.                              this.form.entryTname.value + CHR(13) + CHR(13)
  1102.               endif
  1103.          case ( this.form.radioSave.value )
  1104.               class::deleteTemplate("genwizard.dbf")
  1105.               class::saveTemplate( false )
  1106.               sMessage += "Saved changes to template: " + ;
  1107.                       this.form.listTemplate.value + CHR(13) + CHR(13)
  1108.       endcase
  1109.       if ( bFinish )
  1110.          if ( this.form.checkGen.value )
  1111.             nCount = class::generateSchedule()
  1112.             sMessage += LTRIM(RTRIM(STR(nCount))) + ;
  1113.                       " entries added to the Schedule table." + CHR(13)              
  1114.          endif
  1115.          MSGBOX( sMessage, "Schedule Generation Wizard", 64 )
  1116.          this.form.close()
  1117.       else
  1118.          this.form.pageno := 4
  1119.       endif
  1120.    return ( bFinish )
  1121.  
  1122.    // {Linked Method} form.buttonnext.onClick
  1123.    function BUTTONNEXT_onClick
  1124.       local bNext
  1125.       bNext = true
  1126.       if ( this.form.pageno == 3 )
  1127.          class::RADIOCHANGE_onChange()
  1128.       endif
  1129.       if ( ( this.form.pageno == 4 ) and this.form.radioNew.value )
  1130.          bNext := class::ValidateNewName()
  1131.       endif
  1132.       if ( bNext )
  1133.          this.form.pageno++
  1134.          this.form.buttonBack.enabled :=  ( this.form.pageno > 1 )
  1135.          this.enabled := ( this.form.pageno < 5 )
  1136.          class::updateCaption()
  1137.          if ( this.form.pageno == 3 )
  1138.             class::refreshFlightLists()
  1139.          endif
  1140.       endif
  1141.    return ( this.form.pageno )
  1142.       
  1143.  
  1144.    // {Linked Method} form.open
  1145.    function Form_Open
  1146.       // force modal
  1147.    return class::Form_ReadModal()
  1148.  
  1149.    // {Linked Method} form.onClose
  1150.    function Form_onClose
  1151.       this.qGen.active := false
  1152.    return ( this.dmConnect.ref.dbFleet.dropTable( this.gTable ) )
  1153.  
  1154.    // {Linked Method} form.readModal
  1155.    function Form_ReadModal
  1156.       local lastDate, q, i
  1157.       q = new Query()
  1158.       i = 1
  1159.  
  1160.       // Copy templates to temporary table. Use temporary table
  1161.       // as the datalink to the day of the week checkbox group.
  1162.       this.gTable = FUNIQUE() +".DBF"
  1163.       this.DMConnect.ref.dbFleet.copyTable("GENWIZARD.DBF", this.gTable )
  1164.       this.qGen = new Query()
  1165.       with ( this.qGen )
  1166.          database := this.DMConnect.ref.dbFleet
  1167.          sql      := "SELECT * FROM '" + this.gTable + "'" 
  1168.          active   := true
  1169.       endwith
  1170.       with ( this )
  1171.          checkSunday.dataLink    := this.qGen.rowset.fields["SUNDAY"]
  1172.          checkMonday.dataLink    := this.qGen.rowset.fields["MONDAY"]
  1173.          checkTuesday.dataLink   := this.qGen.rowset.fields["TUESDAY"]
  1174.          checkWednesday.dataLink := this.qGen.rowset.fields["WEDNESDAY"]
  1175.          checkThursday.dataLink  := this.qGen.rowset.fields["THURSDAY"]
  1176.          checkFriday.dataLink    := this.qGen.rowset.fields["FRIDAY"]
  1177.          checkSaturday.dataLink  := this.qGen.rowset.fields["SATURDAY"]
  1178.       endwith
  1179.  
  1180.       // calculate generation start date
  1181.       with ( q )
  1182.          database := this.DMConnect.ref.dbFleet
  1183.          sql      := 'SELECT MAX(schedule."Flight Date") FROM schedule'
  1184.          active   := true
  1185.       endwith
  1186.       lastDate = q.rowset.fields[1].value
  1187.       q.active := false
  1188.         
  1189.       with ( this.spinBegin )
  1190.          value        := lastDate + 1
  1191.          minRange     := lastDate
  1192.          maxRange     := lastDate.setYear( lastDate.getYear() + 2 )
  1193.          rangeRequire := true
  1194.       endwith
  1195.  
  1196.       class::fillTemplateList(this)    
  1197.  
  1198.       // fill aircraft combobox
  1199.       i := 1
  1200.       with ( q )
  1201.          sql    := 'SELECT aircraft."Aircraft ID", make, model ' + ;
  1202.                    ' FROM aircraft ' + ;
  1203.                    ' ORDER BY aircraft."Aircraft ID"'
  1204.          active := true
  1205.       endwith
  1206.  
  1207.       this.comboAircraft.options = new Array( q.rowset.count() )    
  1208.       do while ( not q.rowset.endOfSet )
  1209.          this.comboAircraft.options[i] := " " + ;
  1210.            RTRIM( LTRIM( STR( INT( q.rowset.fields["Aircraft ID"].value ) ) ) ) ;
  1211.            + " - " + q.rowset.fields["Make"].value.rightTrim() + " " + ;
  1212.                      q.rowset.fields["Model"].value.rightTrim()
  1213.  
  1214.          i++
  1215.          q.rowset.next()
  1216.       enddo
  1217.       q.active := false
  1218.  
  1219.       with ( this.comboAircraft )
  1220.          dataSource := "ARRAY FORM.comboAircraft.options"
  1221.          value := this.comboAircraft.options[1]
  1222.       endwith   
  1223.  
  1224.       this.pageno := 1
  1225.       this.mdi := false
  1226.    return GENWIZARDFORM::ReadModal()
  1227.  
  1228.    function fillTemplateList( thisForm, sTemplate )
  1229.       // fill template listbox
  1230.       local i, nSelect, q, tList
  1231.      
  1232.       i       = 1
  1233.       nSelect = 1
  1234.       q       = new Query()
  1235.       tList   = thisForm.listTemplate
  1236.  
  1237.       sTemplate = IIF( PCOUNT() > 1, sTemplate, "Standard" )
  1238.  
  1239.       q.sql := 'SELECT DISTINCT gwizard."Template Name" ' + ;
  1240.                ' FROM "' + thisForm.gTable + '" gwizard ' + ;
  1241.                ' ORDER BY gwizard."Template Name"'
  1242.       q.active := true
  1243.  
  1244.       tList.options = new Array( q.rowset.count() )    
  1245.       do while ( not q.rowset.endOfSet )
  1246.          tList.options[i] := q.rowset.fields[1].value
  1247.          if ( q.rowset.fields[1].value.rightTrim() == sTemplate.rightTrim() )
  1248.             nSelect := i
  1249.          endif
  1250.          i++
  1251.          q.rowset.next()
  1252.       enddo
  1253.       q.active := false
  1254.  
  1255.       tList.dataSource := "ARRAY FORM.listTemplate.options"
  1256.       if ( PCOUNT() > 1 )
  1257.          tList.curSel := nSelect 
  1258.       endif
  1259.  
  1260.       with ( thisForm )
  1261.          buttonDelete.enabled := sTemplate <> "Standard"
  1262.          buttonRename.enabled := sTemplate <> "Standard"
  1263.       endwith
  1264.    return ( nSelect )
  1265.  
  1266.    // {Linked Method} form.listselect.onSelChange
  1267.    function refreshDays
  1268.       local rFlight, nFlight, bSelect
  1269.       rGen = this.form.qGen.rowset
  1270.       rFlight = this.form.flight1.rowset
  1271.       nFlight = VAL( this.form.listSelect.value )
  1272.       bSelect = ( this.form.listSelect.cursel < 1 )
  1273.                              
  1274.       if ( bSelect )
  1275.          with ( this.form )
  1276.             checkSunday.enabled    := false
  1277.             checkMonday.enabled    := false
  1278.             checkTuesday.enabled   := false
  1279.             checkWednesday.enabled := false
  1280.             checkThursday.enabled  := false
  1281.             checkFriday.enabled    := false
  1282.             checkSaturday.enabled  := false
  1283.          endwith
  1284.       else
  1285.          if ( rFlight.applyLocate( '"Flight ID" = ' + INT( nFlight ) ) )
  1286.             rGen.save()
  1287.             if ( class::locateGenRow() )        
  1288.                with ( this.form )
  1289.                   checkSunday.enabled    := rFlight.fields["SUNDAY"].value
  1290.                   checkMonday.enabled    := rFlight.fields["MONDAY"].value
  1291.                   checkTuesday.enabled   := rFlight.fields["TUESDAY"].value
  1292.                   checkWednesday.enabled := rFlight.fields["WEDNESDAY"].value
  1293.                   checkThursday.enabled  := rFlight.fields["THURSDAY"].value
  1294.                   checkFriday.enabled    := rFlight.fields["FRIDAY"].value
  1295.                   checkSaturday.enabled  := rFlight.fields["SATURDAY"].value
  1296.                endwith
  1297.             endif
  1298.          endif
  1299.       endif
  1300.    return ( bSelect )
  1301.  
  1302.    // {Linked Method} form.comboaircraft.onChange
  1303.    function refreshFlightLists
  1304.        local q, rFlight, nFlight, sFlight
  1305.        q = new Query()
  1306.        rFlight = this.form.flight1.rowset
  1307.        with ( q )
  1308.           database := this.form.DMConnect.ref.dbFleet
  1309.           sql := 'SELECT genwizard."Flight ID", ' + ;
  1310.                  '       flight."From ID", ' + ; 
  1311.                  '       flight."To ID" ' + ;
  1312.             ' FROM "' + this.form.gTable +'" genwizard ' + ;
  1313.             ' INNER JOIN "flight.dbf" flight ' + ;
  1314.             '    ON (genwizard."Flight ID" = flight."Flight ID") ' + ; 
  1315.             ' WHERE (genwizard."Template Name" = ' + "'" +  this.form.listTemplate.value + "')" +;
  1316.             '   AND (genwizard."Aircraft ID" = ' + INT( VAL( this.form.comboAircraft.value ) ) + ")" + ;
  1317.             ' ORDER BY genwizard."Flight ID" ' 
  1318.           active := true
  1319.        endwith
  1320.  
  1321.        this.form.listAvail.options  = new Array()
  1322.        this.form.listSelect.options = new Array()
  1323.  
  1324.        rFlight.first()
  1325.        do while ( not rFlight.endOfSet )
  1326.           nFlight = INT( rFlight.fields["Flight ID"].value )
  1327.           sFlight = " " + TRANSFORM(nFlight,"99") + " - " + ;
  1328.                     rFlight.fields["From ID"].value + " to " + ;
  1329.                     rFlight.fields["To ID"].value + "   " + ;
  1330.                     rFlight.fields["Departs"].value 
  1331.           if ( q.rowset.endOfSet )
  1332.              this.form.listAvail.options.add( sFlight )
  1333.           else
  1334.              if ( nFlight == INT( q.rowset.fields["Flight ID"].value ) )
  1335.                 this.form.listSelect.options.add( sFlight )
  1336.                 q.rowset.next()
  1337.              else
  1338.                 this.form.listAvail.options.add( sFlight )
  1339.              endif
  1340.           endif
  1341.           rFlight.next()
  1342.        enddo
  1343.        q.active := false
  1344.        this.form.listAvail.options.sort()
  1345.        with ( this.form.listAvail )          
  1346.           dataSource := "ARRAY FORM.listAvail.options"
  1347.           curSel := 1
  1348.        endwith
  1349.        this.form.listSelect.dataSource := "ARRAY FORM.listSelect.options"          
  1350.        if ( this.form.listSelect.options.size > 0 )
  1351.           this.form.listSelect.curSel := 1       
  1352.        endif
  1353.  
  1354.        class::locateGenRow()
  1355.        class::refreshDays()
  1356.    return
  1357.  
  1358.    function locateGenRow
  1359.       local rGen, sTemplate, nFlight, nAircraft, bFound
  1360.       rGen = this.form.qGen.rowset
  1361.       sTemplate = "'" + this.form.listTemplate.value + "'"
  1362.       nFlight   = INT( VAL( this.form.listSelect.value ) )
  1363.       nAircraft = INT( VAL( this.form.comboAircraft.value ) )
  1364.       bFound = rGen.applyLocate('("Template Name" = ' + sTemplate + ")" + ;
  1365.                            ' AND ("Aircraft ID" = ' + nAircraft + ")" + ;
  1366.                            ' AND ("Flight ID" = ' + nFlight   + ")")
  1367.    return (bFound)  
  1368.  
  1369.    function saveTemplate( bNew )
  1370.       local db, qSource, qDest, uSet, sTemp, bRVal
  1371.       qSource = new Query()
  1372.       qDest   = new Query()
  1373.       uSet    = new UpdateSet()
  1374.       sTemp   = "T" + RIGHT(FUNIQUE(),7) + ".DBF"
  1375.       bRVal   = true
  1376.       db = this.form.dmConnect.ref.dbFleet
  1377.       db.copyTable( this.form.gTable, sTemp )
  1378.       db.executeSQL('DELETE FROM "' + sTemp + '"  gwizard ' + ;
  1379.                     ' WHERE gwizard."Template Name" <> ' + ;
  1380.                       "'" + this.form.listTemplate.value + "'")
  1381.       db.packTable( sTemp )
  1382.       with ( qSource )      
  1383.          database := db
  1384.          sql      := "SELECT * FROM '" + sTemp + "'"
  1385.          active   := true
  1386.       endwith
  1387.       if ( bNew )
  1388.          do while ( not qSource.rowset.endOfSet )
  1389.             qSource.rowset.fields["Template Name"].value := ;
  1390.                  this.form.entryTname.value
  1391.             qSource.rowset.next()
  1392.          enddo
  1393.          qSource.rowset.first()
  1394.       endif
  1395.       with ( qDest )
  1396.          database := db
  1397.          sql      := "SELECT * FROM 'GENWIZARD.DBF'"
  1398.          active   := true
  1399.       endwith
  1400.  
  1401.       with ( uSet )
  1402.          source      := qSource.rowset
  1403.          destination := qDest.rowset
  1404.       endwith
  1405.       bRVal := uSet.append()  
  1406.       qSource.active := false
  1407.       qDest.active := false
  1408.    return ( bRVal )
  1409.  
  1410.    function generateSchedule      
  1411.       local nCount, dateCursor, dateStop, dateStart
  1412.       local rSched, tQ, tF
  1413.       nCount     = 0
  1414.       dateStart  = this.form.spinBegin.value
  1415.       dateCursor = new Date()
  1416.       dateStop   = new Date()
  1417.       rSched     = this.form.schedule1.rowset     
  1418.       tQ         = new Query()
  1419.  
  1420.       with ( tQ )          
  1421.           sql := 'SELECT * ' + ;
  1422.                  ' FROM "' + this.form.gTable + '" gwizard ' + ;
  1423.                  ' WHERE gwizard."Template Name" = ' + ;
  1424.                     "'" + this.form.listTemplate.value + "'"
  1425.           active := true
  1426.       endwith
  1427.       tF = tQ.rowset.fields
  1428.  
  1429.       dateStop.setDate( dateStart.getDate() )
  1430.       dateStop.setMonth( dateStart.getMonth() + 1 )
  1431.       dateStop.setYear( dateStart.getYear() )
  1432.  
  1433.       do while ( not tQ.rowset.endOfSet )
  1434.  
  1435.          dateCursor.setDate( dateStart.getDate() )
  1436.          dateCursor.setMonth( dateStart.getMonth() )
  1437.          dateCursor.setYear( dateStart.getYear() )         
  1438.          do while ( VAL( DTOS( dateCursor ) ) < VAL( DTOS( dateStop) ) )
  1439.          if ( tF[ CDOW( dateCursor ) ].value )
  1440.                rSched.beginAppend()
  1441.                rSched.fields["Flight Date"].value := dateCursor
  1442.                rSched.fields["Flight ID"].value   := tF["Flight ID"].value
  1443.                rSched.fields["Aircraft ID"].value := tF["Aircraft ID"].value
  1444.                rSched.save()
  1445.                nCount++
  1446.             endif
  1447.             dateCursor.setDate( dateCursor.getDate() + 1 )
  1448.          enddo
  1449.          tQ.rowset.next()
  1450.       enddo
  1451.          
  1452.    return ( nCount )
  1453.  
  1454.    // {Linked Method} form.listtemplate.onOpen
  1455.    function LISTTEMPLATE_onOpen
  1456.       if ( this.options.size > 0 )
  1457.          this.curSel := 1
  1458.       endif
  1459.       with ( this.form )
  1460.            buttonDelete.enabled := this.options[1] <> "Standard"
  1461.            buttonRename.enabled := this.options[1] <> "Standard"  
  1462.       endwith
  1463.    return ( this.cursel )
  1464.  
  1465.  
  1466.    // {Linked Method} form.listtemplate.onSelChange
  1467.    function LISTTEMPLATE_onSelChange
  1468.       local bStandard
  1469.       bStandard = (LTRIM(this.value) == "Standard")
  1470.       this.form.buttonDelete.enabled := ( not bStandard )
  1471.       this.form.buttonRename.enabled := ( not bStandard )
  1472.    return (bStandard)
  1473.  
  1474.    function ValidateNewName
  1475.       local bValid
  1476.       bValid = false
  1477.       if ISBLANK(this.form.entryTName.value)
  1478.          MSGBOX("New Template name cannot be blank.","Alert",0 + 48)
  1479.       else
  1480.          q = new Query()
  1481.          with ( q )
  1482.             database := this.form.dmConnect.ref.dbFleet
  1483.             sql      := 'select count(gwizard."Template Name") ' + ;
  1484.                         ' from genwizard gwizard ' + ;
  1485.                         ' where gwizard."Template Name" = ' + ;
  1486.                     "'" + this.form.entryTName.value + "'"
  1487.             active   := true
  1488.          endwith
  1489.          if ( q.rowset.fields[1].value == 0 )
  1490.             bValid := true
  1491.          else
  1492.             MSGBOX("New template name must be unique.","Alert",0 + 48)
  1493.          endif
  1494.          q.active := false
  1495.       endif
  1496.    return bValid
  1497. endclass
  1498.  
  1499. function prompt( sCaption, sValue )
  1500.    local sNewValue, f
  1501.    sNewValue = sValue
  1502.    f = new promptForm()
  1503.    f.textCaption.text := sCaption
  1504.    f.entry.value := sValue
  1505.    f.readModal()
  1506.    if ( f.OK )
  1507.       sNewValue := f.entry.value
  1508.    endif
  1509.    f.release()
  1510. return (sNewValue)
  1511.  
  1512. class promptForm of FORM
  1513.    with (this)
  1514.       onOpen = { ; this.OK = false }
  1515.       scaleFontBold = false
  1516.       height = 6
  1517.       left = 29
  1518.       top = 6
  1519.       width = 53
  1520.       text = ""
  1521.       mdi = false
  1522.    endwith
  1523.  
  1524.  
  1525.    this.ENTRY = new ENTRYFIELD(this)
  1526.    with (this.ENTRY)
  1527.       height = 1
  1528.       left = 2.5
  1529.       top = 3
  1530.       width = 49
  1531.       fontSize = 8
  1532.       borderStyle = 7
  1533.    endwith
  1534.  
  1535.  
  1536.    this.TEXTCAPTION = new TEXT(this)
  1537.    with (this.TEXTCAPTION)
  1538.       height = 2
  1539.       left = 2.5
  1540.       top = 0.5
  1541.       width = 49
  1542.       colorNormal = "BtnText"
  1543.       fontSize = 8
  1544.       text = "Prompt"
  1545.    endwith
  1546.  
  1547.  
  1548.    this.BUTTONOK = new PUSHBUTTON(this)
  1549.    with (this.BUTTONOK)
  1550.       onClick = { ; this.form.OK := true ; this.form.close() }
  1551.       height = 1.15
  1552.       left = 28
  1553.       top = 4.5
  1554.       width = 10.5
  1555.       text = "OK"
  1556.       default = true
  1557.       fontSize = 8
  1558.       group = true
  1559.    endwith
  1560.  
  1561.  
  1562.    this.BUTTONCANCEL = new PUSHBUTTON(this)
  1563.    with (this.BUTTONCANCEL)
  1564.       onClick = { ; this.form.close() }
  1565.       height = 1.15
  1566.       left = 41
  1567.       top = 4.5
  1568.       width = 10.5
  1569.       text = "Cancel"
  1570.       fontSize = 8
  1571.       group = true
  1572.    endwith
  1573.  
  1574. endclass
  1575.